﻿#include<stdio.h>
#include <graphics.h>
#include <assert.h>
#include <stdlib.h>
#include<conio.h>//_getch();
#include <time.h>
#include <math.h>
#include<mmsystem.h>//包含多媒体设备接口头文件
#pragma comment(lib,"winmm.lib")//加载静态库
#define PI 3.1415926
#define HEIGHT  503
#define WIDTH 700
int score = 0;
static int enemy = 0;
static int mode = 0;
IMAGE img_bk, img_plane, img_a, img_b, img_c, img_abullet, img_bbullet, img_cbullet, img_planebullet, img_tmp, img_start, img_sta, img_fail, img_history,img_hp,img_nam,img_score,img_select;
typedef struct bullet
{
	float x, y;
	float vx, vy;
	int  isexist;
	struct bullet* next;

}list;
list* planebullet = NULL;
list* abullet = NULL;
list* bbullet = NULL;
void pushback2(list** pphead, float vx, float vy);
void pushback3(list** pphead, float vx, float vy);
void pushback1(list** pphead, list* newnode);
struct aircraft
{
	int x, y;
	int width;
	int height;
	int speed;
	int bornflag;
	int hp;

};
aircraft plane, a, b, c;
static int dir1 = 1;

void bgm()
{    //打开音乐
	mciSendString("open ./bgm.MP3", 0, 0, 0);//后面参数不用管
	//播放音乐
	mciSendString("play ./bgm.MP3", 0, 0, 0);//后面参数不用管
}
void bgm1()
{
	mciSendString("close ./shoot.MP3", 0, 0, 0);//后面参数不用管
	//打开音乐
	mciSendString("open ./shoot.MP3", 0, 0, 0);//后面参数不用管
	//播放音乐
	mciSendString("play ./shoot.MP3", 0, 0, 0);//后面参数不用管
}
void bgm2()
{    //打开音乐
	mciSendString("open ./boom.MP3", 0, 0, 0);//后面参数不用管
	//播放音乐
	mciSendString("play ./boom.MP3", 0, 0, 0);//后面参数不用管
}
void bgm3()
{
	mciSendString("close ./change.MP3", 0, 0, 0);//后面参数不用管
	//打开音乐
	mciSendString("open ./change.MP3", 0, 0, 0);//后面参数不用管
	//播放音乐
	mciSendString("play ./change.MP3", 0, 0, 0);//后面参数不用管
}
void bgm4()
{

	mciSendString("open ./game.MP3", 0, 0, 0);//后面参数不用管
	//播放音乐
	mciSendString("play ./game.MP3", 0, 0, 0);//后面参数不用管
}
bool Timer(int ms, int id)
{
	static DWORD t[10];

	if (clock() - t[id] > ms)
	{

		t[id] = clock();
		return true;
	}

	return false;
}

void datainit()
{
	plane.x = 150;
	plane.y = 150;
	
	a.speed = 1;
	a.bornflag = 1;
	b.bornflag = 1;
	c.bornflag = 1;
	a.width = 100;
	a.height = 100;
	b.speed = 1;
	b.width = 80;
	b.height = 100;
	c.height = 70;
	c.width = 70;
	c.speed = 3;
	plane.hp = 500;
	a.hp = 500;
	b.hp = 500;
	c.hp = 500;

}
list* BuyabulletNode(float vx, float vy)
{
	list* newnode = (list*)malloc(sizeof(list));//空间申请
	assert(newnode);//断言，新结点是否申请到了
	newnode->vx = vx;//数据赋值
	newnode->vy = vy;//数据赋值
	newnode->x = a.x + a.width / 2-10;
	newnode->y = a.y+80;
	newnode->isexist = 1;
	newnode->next = NULL;//指向的地址赋值
	return newnode;//将申请好的空间首地址返回回去



}
list* BuybbulletNode(float vx, float vy)
{
	list* newnode = (list*)malloc(sizeof(list));//空间申请
	assert(newnode);//断言，新结点是否申请到了
	newnode->vx = vx;//数据赋值
	newnode->vy = vy;//数据赋值
	newnode->x = b.x + b.width / 2 - 10;
	newnode->y = b.y + 80;
	newnode->isexist = 1;
	newnode->next = NULL;//指向的地址赋值
	return newnode;//将申请好的空间首地址返回回去



}
list* BuyplanebulletNode(float vx, float vy)
{





	list* newnode = (list*)malloc(sizeof(list));//空间申请
	assert(newnode);//断言，新结点是否申请到了
	newnode->vx = vx;//数据赋值
	newnode->vy = vy;//数据赋值
	newnode->x = plane.x + plane.width / 2+17;
	newnode->y = plane.y;
	newnode->isexist = 1;
	newnode->next = NULL;//指向的地址赋值
	return newnode;//将申请好的空间首地址返回回去



}
void drawAlpha(IMAGE* picture, int  picture_x, int picture_y) //x为载入图片的X坐标，y为Y坐标
{
	// 变量初始化
	DWORD* dst = GetImageBuffer();    // GetImageBuffer()函数，用于获取绘图设备的显存指针，EASYX自带
	DWORD* draw = GetImageBuffer();
	DWORD* src = GetImageBuffer(picture); //获取picture的显存指针
	int picture_width = picture->getwidth(); //获取picture的宽度，EASYX自带
	int picture_height = picture->getheight(); //获取picture的高度，EASYX自带
	int graphWidth = getwidth();       //获取绘图区的宽度，EASYX自带
	int graphHeight = getheight();     //获取绘图区的高度，EASYX自带
	int dstX = 0;    //在显存里像素的角标

	// 实现透明贴图 公式： Cp=αp*FP+(1-αp)*BP ， 贝叶斯定理来进行点颜色的概率计算
	for (int iy = 0; iy < picture_height; iy++)
	{
		for (int ix = 0; ix < picture_width; ix++)
		{
			int srcX = ix + iy * picture_width; //在显存里像素的角标
			int sa = ((src[srcX] & 0xff000000) >> 24); //0xAArrggbb;AA是透明度
			int sr = ((src[srcX] & 0xff0000) >> 16); //获取RGB里的R
			int sg = ((src[srcX] & 0xff00) >> 8);   //G
			int sb = src[srcX] & 0xff;              //B
			if (ix >= 0 && ix <= graphWidth && iy >= 0 && iy <= graphHeight && dstX <= graphWidth * graphHeight)
			{
				if ((ix + picture_x) >= 0 && (ix + picture_x) <= graphWidth)	//防止出边界后循环显示
				{
					dstX = (ix + picture_x) + (iy + picture_y) * graphWidth; //在显存里像素的角标
					int dr = ((dst[dstX] & 0xff0000) >> 16);
					int dg = ((dst[dstX] & 0xff00) >> 8);
					int db = dst[dstX] & 0xff;
					draw[dstX] = ((sr * sa / 255 + dr * (255 - sa) / 255) << 16)  //公式： Cp=αp*FP+(1-αp)*BP  ； αp=sa/255 , FP=sr , BP=dr
						| ((sg * sa / 255 + dg * (255 - sa) / 255) << 8)         //αp=sa/255 , FP=sg , BP=dg
						| (sb * sa / 255 + db * (255 - sa) / 255);              //αp=sa/255 , FP=sb , BP=db
				}
			}
		}
	}
}
void selectplane()
{
	while (1)
	{
		BeginBatchDraw();
		loadimage(&img_select, "./22.png");
		drawAlpha(&img_select, 0, 0);
		loadimage(&img_select, "./23.png");
		drawAlpha(&img_select, 0, 0);
		loadimage(&img_select, "./24.png");
		drawAlpha(&img_select, 0, 400);
		if (mode == 0)
		{
			
			loadimage(&img_plane, "./1.png");
			drawAlpha(&img_plane, 300, 200);
		}
		
		if (mode == 1)
		{
			loadimage(&img_plane, "./10.png");
			drawAlpha(&img_plane, 300, 200);
		}
		else if (mode == 2)
		{
			loadimage(&img_plane, "./11.png");
			drawAlpha(&img_plane, 300, 200);
		}
		else if (mode == 3)
		{
			loadimage(&img_plane, "./12.png");
			drawAlpha(&img_plane, 300, 200);
		}
		else if (mode == 4)
		{
			loadimage(&img_plane, "./13.png");
			drawAlpha(&img_plane, 300, 200);
		}
		else if (mode == 5)
		{
			loadimage(&img_plane, "./25.png");
			drawAlpha(&img_plane, 300, 200);
		}
		
	







		

		if (GetAsyncKeyState(VK_LEFT) || GetAsyncKeyState('A') && Timer(300, 1))
		{
			bgm3();
			if (mode == 0)
			{
				mode = 0;
			}
			else
			{
				mode--;
			}
		}
		
		if (GetAsyncKeyState(VK_RIGHT) || GetAsyncKeyState('D') && Timer(300, 1))
		{
			bgm3();

			if (mode == 5)
			{
				mode = 5;
			}
			else
			{
				mode++;
			}

		}
		if ((GetAsyncKeyState(VK_SPACE)) && Timer(300, 1))
		{
			break;
		}
		EndBatchDraw();
	}











}

void load()
{
	loadimage(&img_bk, "./back.png");
	if (mode == 0)
	{
		loadimage(&img_plane, "./1.png");
	}
	loadimage(&img_a, "./2.png");
	loadimage(&img_b, "./3.png");
	loadimage(&img_c, "./4.png");
	loadimage(&img_abullet, "./5.png");
	loadimage(&img_bbullet, "./6.png");
	loadimage(&img_cbullet, "./7.png");
	if (mode == 0)
	{
		loadimage(&img_planebullet, "./8.png");
	}
	if (mode == 1)
	{
		loadimage(&img_planebullet, "./8.png");
	}
	if (mode == 2)
	{
		loadimage(&img_planebullet, "./5.png");
	}
	if (mode == 3)
	{
		loadimage(&img_planebullet, "./16.png");
	}
	if (mode == 4)
	{
		loadimage(&img_planebullet, "./7.png");
	}

	if (mode == 5)
	{
		loadimage(&img_planebullet, "./19.png");
	}

}
void draw()
{
	putimage(0, 0,&img_bk);
	loadimage(&img_nam, "./20.png");
	drawAlpha(&img_nam, 500, 0);
	
	if (plane.hp == 500)
	{
		//img_hp
		loadimage(&img_hp, "./19.png");
		drawAlpha(&img_hp, 628, 0);





	}
	if (plane.hp == 1000)
	{
		//img_hp
		loadimage(&img_hp, "./19.png");
		loadimage(&img_hp, "./19.png");
		drawAlpha(&img_hp, 628, 0);
		drawAlpha(&img_hp, 652, 0);




	}
	if (plane.hp == 1500)
	{
		//img_hp
		loadimage(&img_hp, "./19.png");
		loadimage(&img_hp, "./19.png");
		loadimage(&img_hp, "./19.png");
		drawAlpha(&img_hp, 628, 0);
		drawAlpha(&img_hp, 652, 0);
		drawAlpha(&img_hp, 676, 0);



	}
	if (plane.x > -1 && plane.x < WIDTH && plane.y>-1 && plane.y + 48< HEIGHT)
	{
		drawAlpha(&img_plane, plane.x, plane.y);
	}
	else
	{
		putimage(plane.x, plane.y, &img_plane);
	}
	if (a.x > -1 && a.x < WIDTH && a.y>0&& a.y + 98 < HEIGHT)
	{
		drawAlpha(&img_a, a.x, a.y);
	}
	else
	{
		putimage(a.x, a.y, &img_a);

	}
	if (b.x > -1 && b.x < WIDTH && b.y>-1 && b.y +120 < HEIGHT)
	{
		drawAlpha(&img_b, b.x, b.y);
	}
	else
	{
		putimage(b.x, b.y, &img_b);

	}
	if (c.x > -1 && c.x < WIDTH && c.y>-1 && c.y + 120 < HEIGHT)
	{
		drawAlpha(&img_c, c.x, c.y);
	}
	else
	{
		putimage(c.x, c.y, &img_c);

	}



	
	
	

		




}

void ufoamove()
{
	
	static int cnt = 0;

	if (a.bornflag == 1)
	{
		a.bornflag = 0;
		a.x = rand() % (WIDTH - a.width);
		a.y = -50;




	}
	if (a.y > 200)
	{
		dir1 = 0;
	}
	else if (a.y < -150)
	{
		dir1 = 1;
		a.bornflag = 1;
	}
	if (1 == dir1)
	{
		a.y += a.speed;

	}
	else
	{
		a.y -= a.speed;
	}
	if (++cnt % 50 == 0)
	{
		pushback2(&abullet, 0, 10);
	




	}
	if (cnt > 99999)
	{
		cnt = 0;
	}













}
void ufobmove()
{
	static int num = 0;
	static int step = b.speed;
	if (b.bornflag == 1)
	{
		b.bornflag = 0;
		b.x = rand() % (WIDTH - b.width);
		b.y = -b.height;




	}
	if (b.x <= 0 || b.x + b.width >= WIDTH)
	{
		step = -step;



	}
	b.x += step;
	b.y++;
	if (b.y >= HEIGHT)
	{
		b.bornflag = 1;


	}

	if (++num % 100 == 0)
	{
		pushback3(&bbullet, 0, 10);
		/*for (int i = 0; i < 10; i++)
		{
			float angle = i * 2 * PI / 10;
			float vx = 1* sin(angle);
			float vy = 1 * cos(angle);
			pushback3(&bbullet, vx, vy);




		}*/


	}
	if (num > 99999)
	{
		num = 0;
	}






}


void pushback1(list** pphead,float vx,float vy)//尾插
{
	
	
	list* newnode = BuyplanebulletNode(vx, vy);
	
	if (*pphead == NULL)//链表无结点
	{
		*pphead = newnode;// 将创建好的头节点的地址给给*pphead，作为新头节点的地址
		
	}
	else
	{
		
		list* tail = *pphead;//定义一个指针，先指向头结点的地址
		while (tail->next != NULL)//循环遍历找尾结点
		{
			tail = tail->next;//指针指向下一个结点

		}
		tail->next = newnode;//找到尾结点，将尾结点的next存放新接结点的地址

	}

}
void pushback2(list** pphead, float vx, float vy)//尾插
{
	
	list* newnode = BuyabulletNode(vx, vy);

	if (*pphead == NULL)//链表无结点
	{
		*pphead = newnode;// 将创建好的头节点的地址给给*pphead，作为新头节点的地址

	}
	else
	{
		
		list* tail = *pphead;//定义一个指针，先指向头结点的地址
		while (tail->next != NULL)//循环遍历找尾结点
		{
			tail = tail->next;//指针指向下一个结点

		}
		tail->next = newnode;//找到尾结点，将尾结点的next存放新接结点的地址

	}

}
void pushback3(list** pphead, float vx, float vy)//尾插
{
	
	list* newnode = BuybbulletNode(vx, vy);

	if (*pphead == NULL)//链表无结点
	{
		*pphead = newnode;// 将创建好的头节点的地址给给*pphead，作为新头节点的地址

	}
	else
	{
		
		list* tail = *pphead;//定义一个指针，先指向头结点的地址
		while (tail->next != NULL)//循环遍历找尾结点
		{
			tail = tail->next;//指针指向下一个结点

		}
		tail->next = newnode;//找到尾结点，将尾结点的next存放新接结点的地址

	}

}
void removebullet(list** pplist)
{
	if (*pplist == NULL)
		return;
	list* cur = *pplist;
	list* prev = NULL;
	while (cur != NULL)
	{
		if (cur->isexist == 0)
		{
			if (*pplist == cur)
			{
				*pplist = cur->next;
				free(cur);
				cur = *pplist;


			}
			else
			{
				prev->next = cur->next;
				free(cur);
				cur = prev;




			}
		}
		else
		{
			prev = cur;
			cur = cur->next;


		}





	}






}

void listchangexy(list** pplist)
{
	if (*pplist == NULL)
		return;
	list* cur = *pplist;
	while (cur != NULL)
	{
		cur->x += cur->vx;
		cur->y += cur->vy;
		
		if ((cur->y<0 )|| (cur->y>HEIGHT) || (cur->x >0) || (cur->x <WIDTH))
			cur->isexist = 0;
		cur = cur->next;



	}










}

void showbullet()
{
	static int count1 = 0;
	
	
	listchangexy(&planebullet);
	//if (++count1 == 20)
	//{
	
	//}
	

	///}
	if (count1 > 99999)
	{
		count1 = 0;
	}

	for (list* cur = planebullet; cur!= NULL; cur = cur ->next)
	{
		if (mode == 0)
		{
			if (cur->x > 5 && cur->x + 15 < WIDTH && cur->y > 5 && cur->y + 15 < HEIGHT)
			{
				drawAlpha(&img_planebullet, cur->x, cur->y);

			}
			else
			{
				putimage(cur->x, cur->y, &img_planebullet);
				
			}
		}
	if (mode == 1)
		{
			if (cur->x > 5 && cur->x + 15 < WIDTH && cur->y > 5 && cur->y + 15 < HEIGHT)
			{
				drawAlpha(&img_planebullet, cur->x, cur->y);

			}
			else
			{
				putimage(cur->x, cur->y, &img_planebullet);
				
			}
		}
		if (mode == 2)
		{
			if (cur->x > 5 && cur->x + 25 < WIDTH && cur->y > 5 && cur->y + 35 < HEIGHT)
			{
				drawAlpha(&img_planebullet, cur->x, cur->y);
				
			}
			else
			{
				putimage(cur->x, cur->y, &img_planebullet);
				
			}
		}
		if (mode == 3)
		{
			if (cur->x > 5 && cur->x + 15 < WIDTH && cur->y > 5 && cur->y + 40 < HEIGHT)
			{
				drawAlpha(&img_planebullet, cur->x, cur->y);

			}
			else
			{
				putimage(cur->x, cur->y, &img_planebullet);
				
			}
		}
		if (mode == 4)
		{
			if (cur->x > 5 && cur->x + 25< WIDTH && cur->y > 5 && cur->y + 43 < HEIGHT)
			{
				drawAlpha(&img_planebullet, cur->x, cur->y);

			}
			else
			{
				putimage(cur->x, cur->y, &img_planebullet);
				
			}
		}
			if (mode == 5)
		{
			if (cur->x > 5 && cur->x + 25< WIDTH && cur->y > 5 && cur->y + 43 < HEIGHT)
			{
				drawAlpha(&img_planebullet, cur->x, cur->y);

			}
			else
			{
				putimage(cur->x, cur->y, &img_planebullet);
				
			}
		 }
		
		
		
		
		
		
		
		
		
		
		
		if (cur->x + 10 < a.x || cur->x > a.x + a.width || cur->y + 10 > a.y || cur->y > a.y + a.height)
		{


		}
		else
		{
			cur->isexist = 0;
			//removebullet(&planebullet);
			score += 600;
			a.hp -= 500;
		}
		if (cur->x + 10 < b.x || cur->x > b.x + b.width || cur->y + 10 > b.y || cur->y > b.y + b.height)
		{


		}
		else
		{
			cur->isexist = 0;
			//removebullet(&planebullet);
			score += 400;
			b.hp -= 500;
		}
		if (cur->x + 10 < c.x || cur->x > c.x + c.width || cur->y + 10 > c.y || cur->y > c.y + c.height)
		{


		}
		else
		{
			cur->isexist = 0;
			//removebullet(&planebullet);
			score += 200;
			c.hp -= 500;
		}


	}
	
	listchangexy(&abullet);
	
	
	
	for (list* cur = abullet; cur != NULL; cur = cur->next)
	{
		if (cur->x > 5 && cur->x + 25 < WIDTH && cur->y > 5 && cur->y + 30 < HEIGHT)
		{
			drawAlpha(&img_abullet, cur->x, cur->y);
			
		}
		else
		{
			putimage(cur->x, cur->y, &img_abullet);

		}







		
		


			if (cur->x + 20 < plane.x || cur->x > plane.x + plane.width || cur->y + 30 > plane.y || cur->y > plane.y + plane.height)
			{
				

			}
			else
			{
				cur->isexist = 0;
			
				plane.hp -= 1000;
			}
		


		

		
	
	}

	listchangexy(&bbullet);

	for (list* cur = bbullet; cur != NULL; cur = cur->next)
	{
		if (cur->x > 5 && cur->x + 15 < WIDTH && cur->y > 5 && cur->y + 20 < HEIGHT)
		{
			drawAlpha(&img_bbullet, cur->x, cur->y);

		}
		else
		{
			putimage(cur->x, cur->y, &img_bbullet);

		}


		
	
		if (cur->x + 10< plane.x || cur->x > plane.x + plane.width || cur->y + 15 > plane.y || cur->y > plane.y + plane.height)
		{


		}
		else
		{
			cur->isexist = 0;
			
			plane.hp -= 1000;
		}
	

	}





}


void ufocmove()
{


	static float disx = 0, disy = 0;
	static float tmpx = 0, tmpy = 0;
	static float vx = 0, vy = 0;

	
	float step = 1000 / c.speed;
	if (1 == c.bornflag)
	{
		c.bornflag = 0;
		tmpx = rand() % (WIDTH - c.width);
		tmpy = -c.height;
		disx = plane.x - tmpx;
		disy = plane.y - tmpy;
		vx = disx / step;
		vy = disy / step;




	}
	tmpx += vx;
	tmpy += vy;
	c.x = (int)(tmpx + 0.5);
	c.y = (int)(tmpy + 0.5);
	if (c.x < -c.width)
	{
		c.bornflag = 1;
	}
	if (c.x > WIDTH)
	{
		c.bornflag = 1;

	}
	if (c.y > HEIGHT)
	{
		c.bornflag = 1;

	}
	if (c.hp <= 0)
	{
		c.bornflag = 1;
		c.hp = 500;

	}






}

void player_move(int speed) //处理飞机移动
{
	int reload_time = 100;
	static int fire_start = 0;
	int tmp = clock();
	if (GetAsyncKeyState(VK_UP) || GetAsyncKeyState('W'))
	{
		if (plane.y > 0)
			plane.y -= speed;
	}
	if (GetAsyncKeyState(VK_DOWN) || GetAsyncKeyState('S'))
	{
		if (plane.y + 51 < HEIGHT)
			plane.y += speed;
	}
	if (GetAsyncKeyState(VK_LEFT) || GetAsyncKeyState('A'))
	{
		if (plane.x > 0)
			plane.x -= speed;
	}
	if (GetAsyncKeyState(VK_RIGHT) || GetAsyncKeyState('D'))
	{
		if (plane.x + 51 < WIDTH)
			plane.x += speed;
	}

	if ((GetAsyncKeyState(VK_SPACE))&& Timer(300, 1))
	{
		
		

		if (mode == 0)
		{
			//bgm1();
			pushback1(&planebullet, 0, -20);
			
		}
		if (mode == 1)
		{
			//bgm1();
			pushback1(&planebullet, 0, -20);


		}
		if (mode == 2)
		{
			//bgm1();
			pushback1(&planebullet, 0, -10);
			
		}
		if (mode == 3)
		{
			//bgm1();
			pushback1(&planebullet, 0, -10);


			}
			
		if (mode == 4)
		{
			//bgm1();
			pushback1(&planebullet, 0, -10);

		}
		if (mode == 5)
		{
			
			
			pushback1(&planebullet, 0, -10);
			

		}
		

		

		

	}
	if (GetAsyncKeyState(VK_SPACE))
	{
		bgm1();

	}

}


void begin()
{
	
	char beginstring[] = "开始游戏";
	char closestring[] = "退出游戏";
	char tipstring[] = "游戏说明 空格：发射子弹";
	setfillcolor(LIGHTBLUE);
	solidrectangle(240, 300, 380, 350);//画矩形
	solidrectangle(240, 360, 380,410);//左上坐标，右下坐标
    loadimage(&img_start,"./start.jpeg");
	//loadimage(&img_sta, "./sta.png");

	
	
	
	putimage(0, 0, &img_start);
	drawAlpha(&img_start,0,0);
	//drawAlpha(&img_sta, 0, 0);
		
	settextcolor(RED);
	setbkmode(TRANSPARENT);
	settextstyle(30, 0, "楷体");
	outtextxy(240 + 10, 300 + 10, beginstring);
	outtextxy(240 + 10, 360 + 10, closestring);
	outtextxy(130, 250, tipstring);
	while (1)
	{
		MOUSEMSG m = GetMouseMsg();//鼠标在矩形显示外框
		if (m.x >= 240 && m.x <= 380 && m.y >= 300 && m.y <= 350)
		{

			setlinecolor(RED);
			rectangle(240 - 5, 300 - 5, 380 + 5, 350 + 5);
			if (m.uMsg == WM_LBUTTONDOWN)
			{
				break;
			}

		}
		else if (m.x >= 240 && m.x <= 380 && m.y >= 360 && m.y <= 410)
		{

			setlinecolor(RED);
			rectangle(240 - 5, 360 - 5, 380 + 5, 410 + 5);
			//退出游戏
			if (m.uMsg == WM_LBUTTONDOWN)
			{
				exit(0);
			}
		}
		else//没在擦除
		{
			setlinecolor(WHITE);
			rectangle(240 - 5, 300 - 5, 380 + 5, 350 + 5);
			rectangle(240 - 5, 360 - 5, 380 + 5, 410 + 5);


		}


	}


}
void crash2()
{
	if (b.x + b.width<plane.x || b.x>plane.x + plane.width || b.y + b.height<plane.y || b.y>plane.y + plane.height)
	{


	}
	else
	{

		plane.hp=0;
		bgm2();
		Timer(4000, 1);
		if (plane.hp == 0)
		{
			loadimage(&img_fail, "./18.png");
			drawAlpha(&img_fail, 120, 0);

			loadimage(&img_plane, "./boom5.png");
			drawAlpha(&img_plane, plane.x, plane.y);
			
			if (Timer(3000, 1))
				exit(0);
		}



	}



}
void crash1()
{
	if (a.x + a.width<plane.x || a.x>plane.x + plane.width || a.y + a.height<plane.y || a.y>plane.y + plane.height)
	{


	}
	else
	{
		plane.hp -= 500;
		bgm2();
		Timer(4000, 1);
		if (plane.hp == 0)
		{
			loadimage(&img_fail, "./18.png");
			drawAlpha(&img_fail, 120, 0);

			loadimage(&img_plane, "./boom5.png");
			drawAlpha(&img_plane, plane.x, plane.y);
			
			if (Timer(3000, 1))
				exit(0);
		}
	
		


	}




	//removebullet(&abullet);





}
void crash3()
{
	if (c.x + c.width<plane.x || c.x>plane.x + plane.width || c.y + c.height<plane.y || c.y>plane.y + plane.height)
	{


	}
	else
	{
		plane.hp = 0;
		bgm2();
		Timer(4000, 1);
		if (plane.hp == 0)
		{
			loadimage(&img_fail, "./18.png");
			drawAlpha(&img_fail, 120, 0);

			loadimage(&img_plane, "./boom5.png");
			drawAlpha(&img_plane, plane.x, plane.y);
			
			if (Timer(4000, 1))
				exit(0);
		}




	}



}

void showScore(int x, int y, int score)
{
	TCHAR time_text[50];
	_stprintf_s(time_text, _T("Score:%d"), score);
	outtextxy(x, y, time_text);
}

int main()
 {

	initgraph(WIDTH, HEIGHT,CONSOLE_FULLSCREEN);
	
	datainit();
	begin();
	selectplane();
	BeginBatchDraw();
	bgm();

	
	while (1)
	{
		
		


	
		
	
		
		load();
		draw();
		ufoamove();
		ufobmove();
		ufocmove();
		player_move(5);
		crash1();
		crash2();
		crash3();
		showScore(520, 50, score);
		printf("hp:%d\n", c.hp);
		if (plane.hp<=0)
		{
			loadimage(&img_fail, "./18.png");
			drawAlpha(&img_fail, 120, 0);

			loadimage(&img_plane, "./boom5.png");
			drawAlpha(&img_plane, plane.x, plane.y);
			
			 if (Timer(3000, 1))
				exit(0);
		}
		if (a.hp <= 0)
		{
			
			a.bornflag = 1;
			if (Timer(2000, 1))
			a.hp = 500;
		}
		if (b.hp <= 0)
		{
			
			b.bornflag =1;
			if (Timer(2000, 1))
			b.hp = 500;
		}
		if (score > 50000)
		{
			bgm4();
			loadimage(&img_fail, "./26.png");
			drawAlpha(&img_fail, 100, 0);
			
			if (Timer(4000, 1))
			exit(0);
		}
		
	
	
		showbullet();
	FlushBatchDraw();
	}
	EndBatchDraw();


	getchar();

}

